using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._Cartography._CartographicRefinement
{
    /// <summary>
    /// <para>Apply Masks From Rules</para>
    /// <para>Applies symbol layer masking to feature layers in a map based on an XML rule file and mask features created by the Make Mask From Rules tool.</para>
    /// <para>将符号图层遮罩应用于基于 XML 规则文件的地图中的要素图层，并屏蔽由根据规则创建遮罩工具创建的要素。</para>
    /// </summary>    
    [DisplayName("Apply Masks From Rules")]
    public class ApplyMasksFromRules : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ApplyMasksFromRules()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_map">
        /// <para>Input Map</para>
        /// <para>The input map containing symbolized features such as a map in a project or a MAPX file on disk.</para>
        /// <para>包含符号化要素的输入映射，例如工程中的地图或磁盘上的 MAPX 文件。</para>
        /// </param>
        /// <param name="_rule_file">
        /// <para>Rule File</para>
        /// <para>The XML file containing rules to define how features should be masked based on colors and symbol parts.</para>
        /// <para>包含规则的 XML 文件，用于定义如何根据颜色和符号部分屏蔽要素。</para>
        /// </param>
        /// <param name="_in_feature_dataset">
        /// <para>Mask Feature Dataset</para>
        /// <para>The feature dataset containing the masking polygon feature classes created by the Make Mask From Rules tool.</para>
        /// <para>包含由根据规则创建掩膜工具创建的屏蔽面要素类的要素数据集。</para>
        /// </param>
        public ApplyMasksFromRules(object _in_map, object _rule_file, object _in_feature_dataset)
        {
            this._in_map = _in_map;
            this._rule_file = _rule_file;
            this._in_feature_dataset = _in_feature_dataset;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Apply Masks From Rules";

        public override string CallName => "topographic.ApplyMasksFromRules";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_map, _rule_file, _in_feature_dataset, _updated_map];

        /// <summary>
        /// <para>Input Map</para>
        /// <para>The input map containing symbolized features such as a map in a project or a MAPX file on disk.</para>
        /// <para>包含符号化要素的输入映射，例如工程中的地图或磁盘上的 MAPX 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Map")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_map { get; set; }


        /// <summary>
        /// <para>Rule File</para>
        /// <para>The XML file containing rules to define how features should be masked based on colors and symbol parts.</para>
        /// <para>包含规则的 XML 文件，用于定义如何根据颜色和符号部分屏蔽要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Rule File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _rule_file { get; set; }


        /// <summary>
        /// <para>Mask Feature Dataset</para>
        /// <para>The feature dataset containing the masking polygon feature classes created by the Make Mask From Rules tool.</para>
        /// <para>包含由根据规则创建掩膜工具创建的屏蔽面要素类的要素数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mask Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_dataset { get; set; }


        /// <summary>
        /// <para>Updated Map</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Map")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_map { get; set; }


        public ApplyMasksFromRules SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}